Перем ЮнитТест;

#Область ОбработчикиСобытийМодуля

Функция ПолучитьСписокТестов(МенеджерТестирования) Экспорт
	
	ЮнитТест = МенеджерТестирования;

	СписокТестов = Новый Массив;	
	СписокТестов.Добавить("ТестКонструктор");
	СписокТестов.Добавить("TestConstructor");
	СписокТестов.Добавить("ТестСтрока");
	СписокТестов.Добавить("ТестЧисло");
	СписокТестов.Добавить("ТестБулево");
	СписокТестов.Добавить("ТестДата");
	СписокТестов.Добавить("ТестНеопределено");
	СписокТестов.Добавить("ТестНазначениеИмениФорма");
	//TODO: СписокТестов.Добавить("ТестЗаписьСИменем");

	Возврат СписокТестов;

КонецФункции

#КонецОбласти

#Область ОбработчикиТестирования

Процедура ТестКонструктор() Экспорт

	Сериализатор = Новый СериализаторXDTO;
	
	ЮнитТест.ПроверитьРавенство(ТипЗнч(Сериализатор), Тип("СериализаторXDTO"));
	
КонецПроцедуры

Procedure TestConstructor() Export

	Serializer = New XDTOSerializer;
	
	ЮнитТест.ПроверитьРавенство(TypeOf(Serializer), Type("XDTOSerializer"));

EndProcedure

Процедура ТестСтрока() Экспорт

	СериализаторXDTO = Новый СериализаторXDTO;

	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();

	ЗаписьXML.ЗаписатьНачалоЭлемента("test");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://www.w3.org/2001/XMLSchema");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");

	ЗаписьXML.ЗаписатьНачалоЭлемента("testImplicit");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, "testImplicit");
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.ЗаписатьНачалоЭлемента("testExplicit");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, "testExplicit", НазначениеТипаXML.Явное);
	ЗаписьXML.ЗаписатьКонецЭлемента();

	ЗаписьXML.ЗаписатьКонецЭлемента();

	ТекстXML = ЗаписьXML.Закрыть();

	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(ТекстXML);
	
	ЧтениеXML.Прочитать(); // "test"
	ЧтениеXML.Прочитать(); // "testImplicit"
	ЧтениеXML.Прочитать(); // "string"
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Имя, "string");
	Строка = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("Строка"));
	ЮнитТест.ПроверитьРавенство(ТипЗнч(Строка), Тип("Строка"));
	ЮнитТест.ПроверитьРавенство(Строка, "testImplicit");
	
	ЧтениеXML.Прочитать(); // "testExplicit"
	ЧтениеXML.Прочитать(); // "string"
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Имя, "string");
	Строка = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
	ЮнитТест.ПроверитьРавенство(ТипЗнч(Строка), Тип("Строка"));
	ЮнитТест.ПроверитьРавенство(Строка, "testExplicit");

КонецПроцедуры

Процедура ТестЧисло() Экспорт

	СериализаторXDTO = Новый СериализаторXDTO;

	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();

	ЗаписьXML.ЗаписатьНачалоЭлемента("test");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://www.w3.org/2001/XMLSchema");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");

	ЗаписьXML.ЗаписатьНачалоЭлемента("testImplicit");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, 100500);
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.ЗаписатьНачалоЭлемента("testExplicit");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, 100500, НазначениеТипаXML.Явное);
	ЗаписьXML.ЗаписатьКонецЭлемента();

	ЗаписьXML.ЗаписатьКонецЭлемента();

	ТекстXML = ЗаписьXML.Закрыть();

	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(ТекстXML);
	
	ЧтениеXML.Прочитать(); // "test"
	ЧтениеXML.Прочитать(); // "testImplicit"
	ЧтениеXML.Прочитать(); // "decimal"
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Имя, "decimal");
	Число = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("Число"));
	ЮнитТест.ПроверитьРавенство(ТипЗнч(Число), Тип("Число"));
	ЮнитТест.ПроверитьРавенство(Число, 100500);
	
	ЧтениеXML.Прочитать(); // "testExplicit"
	ЧтениеXML.Прочитать(); // "decimal"
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Имя, "decimal");
	Число = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
	ЮнитТест.ПроверитьРавенство(ТипЗнч(Число), Тип("Число"));
	ЮнитТест.ПроверитьРавенство(Число, 100500);

КонецПроцедуры

Процедура ТестБулево() Экспорт

	СериализаторXDTO = Новый СериализаторXDTO;

	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();

	ЗаписьXML.ЗаписатьНачалоЭлемента("test");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://www.w3.org/2001/XMLSchema");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");

	ЗаписьXML.ЗаписатьНачалоЭлемента("testImplicit");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Истина);
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.ЗаписатьНачалоЭлемента("testExplicit");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Ложь, НазначениеТипаXML.Явное);
	ЗаписьXML.ЗаписатьКонецЭлемента();

	ЗаписьXML.ЗаписатьКонецЭлемента();

	ТекстXML = ЗаписьXML.Закрыть();

	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(ТекстXML);
	
	ЧтениеXML.Прочитать(); // "test"
	ЧтениеXML.Прочитать(); // "testImplicit"
	ЧтениеXML.Прочитать(); // "boolean"
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Имя, "boolean");
	Булево = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("Булево"));
	ЮнитТест.ПроверитьРавенство(ТипЗнч(Булево), Тип("Булево"));
	ЮнитТест.ПроверитьИстину(Булево);
	
	ЧтениеXML.Прочитать(); // "testExplicit"
	ЧтениеXML.Прочитать(); // "boolean"
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Имя, "boolean");
	Булево = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
	ЮнитТест.ПроверитьРавенство(ТипЗнч(Булево), Тип("Булево"));
	ЮнитТест.ПроверитьЛожь(Булево);

КонецПроцедуры

Процедура ТестДата() Экспорт

	ТестоваяДата = ТекущаяДата();

	СериализаторXDTO = Новый СериализаторXDTO;

	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();

	ЗаписьXML.ЗаписатьНачалоЭлемента("test");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://www.w3.org/2001/XMLSchema");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");

	ЗаписьXML.ЗаписатьНачалоЭлемента("testImplicit");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ТестоваяДата);
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.ЗаписатьНачалоЭлемента("testExplicit");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ТестоваяДата, НазначениеТипаXML.Явное);
	ЗаписьXML.ЗаписатьКонецЭлемента();

	ЗаписьXML.ЗаписатьКонецЭлемента();

	ТекстXML = ЗаписьXML.Закрыть();

	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(ТекстXML);
	
	ЧтениеXML.Прочитать(); // "test"
	ЧтениеXML.Прочитать(); // "testImplicit"
	ЧтениеXML.Прочитать(); // "dateTime"
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Имя, "dateTime");
	Дата = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("Дата"));
	ЮнитТест.ПроверитьРавенство(ТипЗнч(Дата), Тип("Дата"));
	ЮнитТест.ПроверитьРавенство(Дата, ТестоваяДата);
	
	ЧтениеXML.Прочитать(); // "testExplicit"
	ЧтениеXML.Прочитать(); // "dateTime"
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Имя, "dateTime");
	Дата = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
	ЮнитТест.ПроверитьРавенство(ТипЗнч(Дата), Тип("Дата"));
	ЮнитТест.ПроверитьРавенство(Дата, ТестоваяДата);

КонецПроцедуры

Процедура ТестНеопределено() Экспорт

	СериализаторXDTO = Новый СериализаторXDTO;

	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();

	ЗаписьXML.ЗаписатьНачалоЭлемента("test");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://www.w3.org/2001/XMLSchema");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");

	ЗаписьXML.ЗаписатьНачалоЭлемента("testImplicit");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Неопределено);
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.ЗаписатьНачалоЭлемента("testExplicit");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Неопределено, НазначениеТипаXML.Явное);
	ЗаписьXML.ЗаписатьКонецЭлемента();

	ЗаписьXML.ЗаписатьКонецЭлемента();

	ТекстXML = ЗаписьXML.Закрыть();

	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(ТекстXML);
	
	ЧтениеXML.Прочитать(); // "test"
	ЧтениеXML.Прочитать(); // "testImplicit"
	ЧтениеXML.Прочитать(); // "Undefined "
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Имя, "Undefined");
	ЗначениеНеопределено = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("Неопределено"));
	ЮнитТест.ПроверитьРавенство(ТипЗнч(ЗначениеНеопределено), Тип("Неопределено"));
	ЮнитТест.ПроверитьРавенство(ЗначениеНеопределено, Неопределено);
	
	ЧтениеXML.Прочитать(); // "testExplicit"
	ЧтениеXML.Прочитать(); // "Undefined "
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Имя, "Undefined");
	ЗначениеНеопределено = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
	ЮнитТест.ПроверитьРавенство(ТипЗнч(ЗначениеНеопределено), Тип("Неопределено"));
	ЮнитТест.ПроверитьРавенство(ЗначениеНеопределено, Неопределено);

КонецПроцедуры

Процедура ТестНазначениеИмениФорма() Экспорт

	СериализаторXDTO = Новый СериализаторXDTO;

	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();

	ЗаписьXML.ЗаписатьНачалоЭлемента("test");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://www.w3.org/2001/XMLSchema");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");

	ЗаписьXML.ЗаписатьНачалоЭлемента("test11");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, "test11", НазначениеТипаXML.Неявное, ФормаXML.Элемент);
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.ЗаписатьНачалоЭлемента("test12");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, "test12", НазначениеТипаXML.Явное, ФормаXML.Элемент);
	ЗаписьXML.ЗаписатьКонецЭлемента();
	
	ЗаписьXML.ЗаписатьНачалоЭлемента("test21");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, "test21", НазначениеТипаXML.Неявное, ФормаXML.Атрибут);
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.ЗаписатьНачалоЭлемента("test22");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, "test22", НазначениеТипаXML.Явное, ФормаXML.Атрибут);
	ЗаписьXML.ЗаписатьКонецЭлемента();

	ЗаписьXML.ЗаписатьНачалоЭлемента("test31");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, "test31", НазначениеТипаXML.Неявное, ФормаXML.Текст);
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.ЗаписатьНачалоЭлемента("test32");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, "test32", НазначениеТипаXML.Явное, ФормаXML.Текст);
	ЗаписьXML.ЗаписатьКонецЭлемента();

	ЗаписьXML.ЗаписатьНачалоЭлемента("test41");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, "test41");
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.ЗаписатьНачалоЭлемента("test42");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, "test42", НазначениеТипаXML.Явное);
	ЗаписьXML.ЗаписатьКонецЭлемента();

	ЗаписьXML.ЗаписатьКонецЭлемента();

	ТекстXML = ЗаписьXML.Закрыть();

	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(ТекстXML);

	ЧтениеXML.Прочитать(); // "test"
	ЧтениеXML.Прочитать(); // "test11"
	ЧтениеXML.Прочитать(); // "string"
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Имя, "string");
	
	ЧтениеXML.Прочитать(); //##text
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Значение, "test11");
	ЧтениеXML.Прочитать(); // "/string"
	ЧтениеXML.Прочитать(); // "/test11"
	
	ЧтениеXML.Прочитать(); // "test12"
	ЧтениеXML.Прочитать(); // "string"
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Имя, "string");
	
	Атрибут = ЧтениеXML.ЗначениеАтрибута("type", "http://www.w3.org/2001/XMLSchema-instance");
	ЮнитТест.ПроверитьРавенство(Атрибут, "string");
	
	ЧтениеXML.Прочитать(); //##text
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Значение, "test12");
	ЧтениеXML.Прочитать(); // "/string"
	ЧтениеXML.Прочитать(); // "/test12"

	ЧтениеXML.Прочитать(); // "test21"
	Атрибут = ЧтениеXML.ЗначениеАтрибута("string");
	ЮнитТест.ПроверитьРавенство(Атрибут, "test21");
	ЧтениеXML.Прочитать(); // "/test21"

	ЧтениеXML.Прочитать(); // "test22"
	Атрибут = ЧтениеXML.ЗначениеАтрибута("string");
	ЮнитТест.ПроверитьРавенство(Атрибут, "test22");
	ЧтениеXML.Прочитать(); // "/test22"

	ЧтениеXML.Прочитать(); // "test31"
	ЧтениеXML.Прочитать(); //##text
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Значение, "test31");
	ЧтениеXML.Прочитать(); // "/test31"

	ЧтениеXML.Прочитать(); // "test32"
	ЧтениеXML.Прочитать(); //##text
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Значение, "test32");
	ЧтениеXML.Прочитать(); // "/test32"

	ЧтениеXML.Прочитать(); // "test41"
	ЧтениеXML.Прочитать(); // "string"
	Строка = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("Строка"));
	ЮнитТест.ПроверитьРавенство(Строка, "test41");
	
	ЧтениеXML.Прочитать(); // "test42"
	ЧтениеXML.Прочитать(); // "string"
	Строка = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
	ЮнитТест.ПроверитьРавенство(Строка, "test42");

КонецПроцедуры

Процедура ТестЗаписьСИменем() Экспорт

	СериализаторXDTO = Новый СериализаторXDTO;

	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();

	ЗаписьXML.ЗаписатьНачалоЭлемента("test");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://www.w3.org/2001/XMLSchema");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");

	ЗаписьXML.ЗаписатьНачалоЭлемента("testImplicit");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, "testImplicit", "testElement", НазначениеТипаXML.Неявное, ФормаXML.Элемент);
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.ЗаписатьНачалоЭлемента("testExplicit");
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, "testExplicit", "testElement", НазначениеТипаXML.Явное, ФормаXML.Элемент);
	ЗаписьXML.ЗаписатьКонецЭлемента();

	ЗаписьXML.ЗаписатьКонецЭлемента();

	ТекстXML = ЗаписьXML.Закрыть();

	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(ТекстXML);
	
	ЧтениеXML.Прочитать(); // "test"
	ЧтениеXML.Прочитать(); // "testImplicit"
	ЧтениеXML.Прочитать(); // "testElement"
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Имя, "testElement");
	Строка = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("Строка"));
	ЮнитТест.ПроверитьРавенство(ТипЗнч(Строка), Тип("Строка"));
	ЮнитТест.ПроверитьРавенство(Строка, "testImplicit");
	
	ЧтениеXML.Прочитать(); // "testExplicit"
	ЧтениеXML.Прочитать(); // "testElement"
	ЮнитТест.ПроверитьРавенство(ЧтениеXML.Имя, "testElement");
	Строка = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
	ЮнитТест.ПроверитьРавенство(ТипЗнч(Строка), Тип("Строка"));
	ЮнитТест.ПроверитьРавенство(Строка, "testExplicit");

КонецПроцедуры

#КонецОбласти

Если СтартовыйСценарий().Источник = ТекущийСценарий().Источник Тогда
	
	СериализаторXDTO = Новый СериализаторXDTO;
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();

	ТекстXML = ЗаписьXML.Закрыть();

	Сообщить(ТекущаяДата());
	Сообщить("НачалоПримера");
	Сообщить(ТекстXML);
	Сообщить("КонецПримера");
	
КонецЕсли;